package base;

import java.util.Arrays;

public class eightQueen {

	private static int num = 0; //记录总数
	private static int[] a = new int[8];

	public static void main(String[] args) {
		eightQueens(0);
		System.out.println(num);
	}

	private static void eightQueens(int r) {
		
		//如果已放满8个皇后,那么计数器加1,并打印出每行皇后位置
		if(r==8) {
			num++;
			System.out.println(Arrays.toString(a));
			return;
		}
		  // 包含回溯的思想在里面  
		for(int i=0;i<8;i++) {
			a[r]=i;	//标记r行i列放置皇后
			 System.out.println(r+">>>"+i);
			boolean ok=true;		//预先置此位可放
			//检查r行i列是否与其它皇后位置冲突
			for(int j=0;j<r;j++) {
				if(a[r]==a[j] || Math.abs(a[r] - a[j]) == Math.abs(r-j)) {	//如果在相同列,或者斜线位置上,那么此位置不行
					ok=false;		//标记此位有冲突
		      
		       break;
				}
			}
			//如果此位可放,那么进行下一个皇后放置
			if(ok) eightQueens(r+1);
		}
	}
}
